# 1.函数的参数列表可以是多个，也可以没有(),(n1,n2...)
# def n1():
#     print("hi")
# def n2(n1, n2):
#     print("hi")


# 2.函数的命名遵循标识符命名规则和规范，具体参考前面讲过的标识符命名规则和规范
# 这样是错误的
# def 1a():
#     print("hi")

# 3.函数中变量是局部的，函数外边不能访问
# def n3():
#     n = 1
#     print(n)
#
# n3()
# 这样是错误的函数中的变量是局部变量
# print(n)


# 4.如果两个函数名称相同，则以就近原则调用
# def cry():
#     print("hi")
#
# def cry():
#     print("hihh")
# cry()


# 5、调用函数时，根据函数定义的参数位置来传递参数，这种传参方式
# #传递的实参和定义的的形参顺序和个数必须一致，
# 同时定义的形参，不需要指定数据类型，会根据传入的实参决定#

# def car_info(name, price, color):
#     print(f"name->{name} price->{price} color->{color}")
#
#     # 传递的实参和定义的的形参顺序和个数必须一致，否则报 TypeError错误
#
# car_info("宝马",500000,"red")


# 6.函数可以有多个返回值
# 比如函数接收两个数量，返回两个数的和，差
# def cal(n1, n2):
#     sum = n1 + n2
#     sub = n1 - n2
#     return sum, sub
#
# # 调用cal函数计算10和20的和与差，并将结果赋值给r1和r2
# r1, r2 = cal(10, 20)
# print(r1, r2)


# 7.函数支持关键字参数
# def car_info(name, price, color):
#     print(f"name->{name} price->{price} color->{color}")
#
# # 正常的调用方式
# car_info("宝马",500000,"red")
#
# # 关键字参数
# car_info(color="red",name="宝马",price=500000)


# 8.函数支持默认参数
# # 注意默认参数 需要放在函数参数列表的最后面
# def car_info(name, price, color="red"):
#     print(f"name->{name} price->{price} color->{color}")
#
# # 这样没有传递 color参数，默认参数color="red"
# car_info("宝马", 500000)


# 9.函数支持可变参数
# def sum(*args):
#     """
#     计算传入的所有数字参数的总和。
#
#     参数:
#     *args: 一个可变长度的数字参数列表。
#
#     返回:
#     所有参数的总和。
#
#     说明:
#     此函数演示了如何接收一个可变长度的参数列表，
#     并通过迭代求和的方式计算所有参数的总和。它展示了
#     如何使用args来接收任意数量的位置参数，并使用for循环
#     来遍历和求和这些参数。
#     """
#     # 打印传入的参数列表及其类型
#     print(f"args->{args} 类型是{type(args)}")
#     # 初始化总和为0
#     total = 0
#     # 遍历参数列表，累加每个元素
#     for element in args:
#         total += element
#     # 返回计算得到的总和
#     return total
#
# # 调用sum函数并打印结果
# result = sum(1, 2, 3, 100)


# 10.函数支持关键字参数
# def car_info(**kwargs):
#     """
#     打印传入的关键字参数。
#
#     参数:
#     **kwargs: 一个可变长度的关键字参数字典。
#
#     返回:
#     无。
#
#     说明:
#     此函数演示了如何接收一个可变长度的关键字参数字典，
#     并打印每个关键字和对应的值。它展示了如何使用kwargs来接收
#     任意数量的关键字参数，并使用for循环来遍历这些参数。
#     """
#     # 打印传入的关键字参数及其类型
#     print(f"kwargs->{kwargs} 类型是{type(kwargs)}")
#     # 遍历关键字参数字典，打印每个关键字和对应的值
#     for key, value in kwargs.items():
#         print(f"{key}: {value}")
#
# # 调用car_info函数并打印结果
# car_info(name="宝马", price=500000, color="red")


# python可以调用另外一个py中的函数
import f1  # 导入模块

print(f1.add(1, 2))
